#include <iostream>
#include <filesystem>
#include "rapidjson//document.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/prettywriter.h"

#include <filesystem>
#include <fstream>
#include <future>

using namespace std;
using namespace rapidjson;

void childprocess(string exe_path, string param)
{
    const string command = filesystem::absolute(exe_path).generic_string() + " " + param;

    // 执行另一个程序，并将输出重定向到FILE指针
    FILE *pipe = _popen(command.c_str(), "w");
    if (pipe == nullptr)
    {
        cout << "无法执行该程序" << endl;
        return;
    }

    // 从其他程序读取输出
    char buffer[128];
    while (fgets(buffer, sizeof(buffer), pipe) != nullptr)
    {
        cout << buffer;
    }

    // 向其他程序发送输入
    // fprintf(pipe, "input");

    // 关闭FILE指针和其他程序
    _pclose(pipe);
}

int runExternalProgram()
{
    // 执行另一个程序的代码，这里只是一个示例
    string origin = "http://127.0.0.1:6660";
    string allowed_origins = "\"{\\\"allowed_origins\\\": [\\\"" + origin + "\\\"]}\"";

    cout << allowed_origins << endl;
    childprocess("./ws/ws.exe", allowed_origins);

    // 返回一个结果或消息
    return 42;
}

int main()
{

    // 启动异步进程
    std::future<int> future = std::async(std::launch::async, runExternalProgram);

    // 在主进程中执行其他任务

    // 获取异步进程的返回值或消息
    int result = future.get();

    // 处理返回值或消息
    std::cout << "Received result: " << result << std::endl;

    cout << 133122 << endl;
    // system("pause");

    return 0;
}